package com.project.collectAPI.entity.MeiTuan;

import com.alibaba.druid.util.StringUtils;
import com.project.collectAPI.comm.MapKeySort;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.HashMap;
import java.util.Map;

@Data
@AllArgsConstructor
public class SystemParam {
    /*
    * 开发者在调用开放平台接口进行编码前，需先计算签名以验证，POST或GET请求的签名计算方式均相同。特别注意：
    1. 服务商的ISV应用，对接接口所操作的门店的access_token务必要参与签名计算，并在请求内容中也上传此access_token。获取access_token的流程，请开发者详细查阅《ISV安全认证》文档。
    2. 品牌商的应用，对接接口不涉及access_token参数。

    下方以品牌应用请求接口时计算签名为例。数据例子与步骤：
    url：https://waimaiopen.meituan.com/api/v1/order/getOrderDaySeq
    系统级参数：app_id=0000; timestamp=1389751221; sig=待计算
    应用级参数：app_poi_code=31号测试店
    app secret：a00ba58f000001aa697ab000006d52d
    *
    * Step 1：
    将接口所有参数（sig除外）按英文字母逐个字符排序（注：参数类型json内的参数不用排序），并用&连接。
    示例：app_id=0000&app_poi_code=31号测试店&timestamp=1389751221

    Step 2：
    按照 请求url + ? + 排序后的参数 + app secret 的顺序进行连接，得到加密前的字符串。
    示例：https://waimaiopen.meituan.com/api/v1/order/getOrderDaySeq?app_id=0000&app_poi_code=31号测试店&timestamp=1389751221a00ba58f000001aa697ab000006d52d

    注意：此步骤，参数中若包含中文，中文保持原文即可，无需对其单独编码。


    Step 3：
    对加密前的字符串进行 MD5 加密，得到32位的签名（注意签名的字母需使用小写的）。
    示例：dbb4d444d68596d03dbcb79a4e4a4e3f

    Step 4：
    将得到的签名赋给 sig 作为请求参数，并用&拼接。注意：发送请求时，中文内容需使用 utf-8 进行编码。示例：
    ■ Get 请求
    url:https://waimaiopen.meituan.com/api/v1/order/getOrderDaySeq?app_id=0000&timestamp=1389751221&sig=dbb4d444d68596d03dbcb79a4e4a4e3f&app_poi_code=31%e5%8f%b7%e6%b5%8b%e8%af%95%e5%ba%97

    ■ Post 请求
    url:https://waimaiopen.meituan.com/api/v1/order/getOrderDaySeq?app_id=0000&timestamp=1389751221&sig=dbb4d444d68596d03dbcb79a4e4a4e3f
    body:app_poi_code=31%e5%8f%b7%e6%b5%8b%e8%af%95%e5%ba%97
    *
    * */
    private PublicApi publicApi;

    public static long timestamp;
    private String  appId;
    private String  appSecret;
    private String  app_poi_code;

    public SystemParam(){
        appId="124552"; //美团开方平台应用id
        appSecret="27740d3b3ea1c31087f43282660e0c94"; //美团开方平台应用密钥
        app_poi_code="18665261"; //南州店
        //System.out.println("timestamp:"+timestamp);
    }

    static {
        timestamp=System.currentTimeMillis();
    }

    /*
    *   Map<String,Object> map=new HashMap<>();
        map.put("timestamp",this.timestamp);
        map.put("app_id",this.appId);
        map.put("app_poi_code",this.app_poi_code);
    * */
    public String getSign(Map<String,Object> map,String apiUrl) throws Exception {
        System.out.println("排序前："+map);
        Map<String,Object> sortMap=MapKeySort.MapKeySort(map);
        System.out.println("排序后："+sortMap);
        String sign=MapKeySort.getKeyAndValueStr(sortMap,apiUrl);
        //System.out.println("签名:"+sign);
        return sign;
    }


} // Class End
